import fp from 'lodash/fp'
import Calc from 'better-calc'

/**
 * 将数字字符串转化为千分位
 * @param {string|number} numStr 要转换的数字字符串
 */
export const toThousandCentimeter = (numStr = '') => {
  numStr = numStr + ''
  if (!numStr.includes('.')) {
    numStr += '.'
  }
  return numStr.replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
    return $1 + ','
  }).replace(/\.$/, '')
}

/**
 * 分转化成元
 * @param {Object} options
 * @param {string|number} [options.value] 要转换的分
 * @param {number} [options.decimal=2] 使用tofixed保留几位小数
 * @param {number} [options.decimalIfNeeded=false] 是否只显示必要的小数,比如5.00将显示为5,5.10将显示为5.1
 * @param {number} [options.thousandCentimeter=true] 需不需要千分位(应该默认不需要的,但是失误写错需要了)
 * @returns {string}
 */
export const toYuan = ({
  value = 0,
  decimal = 2,
  decimalIfNeeded = false,
  thousandCentimeter = true
}) => {
  value = +value
  let yuan = Calc.div(value, 100).toFixed(decimal)
  if (thousandCentimeter) {
    yuan = toThousandCentimeter(yuan)
  }
  // 只显示必要的小数，比如5.00将显示为5,5.10将显示为5.1
  if (decimalIfNeeded) {
    return fp.trimCharsEnd('.', fp.trimCharsEnd('0', yuan))
  } else {
    return yuan
  }
}

/**
 * 将元转换成分
 * @param {Object} options
 * @param {string|number} [options.value] 要转换的元
 * @returns {number}
 */
export const toFen = ({
  value = 0
}) => {
  value = +value
  return +Calc.mul(value, 100).toFixed(0)
}
